home *** CD-ROM | disk | FTP | other *** search
/ Revolution - Das Atari CD Magazin 1997 / Revolution - Das Atari CD Magazin 1.iso / software / anwendng / qed_397 / sourcen / dial.c < prev    next >
C/C++ Source or Header  |  1996-10-15  |  1KB  |  79 lines

  1. /*
  2.  * dial.c
  3.  * Listenverwaltung für Dialoge
  4.  *
  5. */
  6. #include <stdlib.h>
  7.  
  8. #include "global.h"
  9. #include "set.h"
  10. #include "dial.h"
  11.  
  12. LOCAL DIALP    dial_list;
  13. LOCAL WORD    dial_anz;
  14. LOCAL SET    used_dials;
  15.  
  16. GLOBAL DIALP new_dial(VOID)
  17. {
  18.     DIALP d_ptr, d2;
  19.     WORD    i;
  20.  
  21.     d_ptr = (DIALP)malloc(sizeof(DIAL_INF));        /* neues Element anlegen */
  22.     if (d_ptr != NULL)
  23.     {
  24.         dial_anz++;
  25.         for (i = dial_anz; (--i) >= 0; )
  26.         {
  27.             if (!setin(used_dials, i))
  28.                 break;
  29.         }
  30.         if (i < 0) 
  31.             return NULL;
  32.         setincl(used_dials, i);
  33.         
  34.         d_ptr->link = i;
  35.         d_ptr->next = NULL;
  36.  
  37.         d2 = dial_list;                                    /* An Ende anhängen */
  38.         while (d2 != NULL)
  39.             d2 = d2->next;
  40.         d2->next = d_ptr;
  41.     }
  42.     return d_ptr;
  43. }
  44.  
  45. GLOBAL VOID destruct_dial(WORD link)
  46. {
  47.     DIALP d_ptr, d2;
  48.     
  49.     d_ptr = get_dial(link);
  50.     if (d_ptr != NULL)
  51.     {
  52.         d2 = dial_list;                                    /* Aus Liste aushängen */
  53.         while (d2->next != d_ptr)
  54.             d2 = d2->next;
  55.         d2->next = d_ptr->next;
  56.         free(d_ptr);
  57.         setexcl(used_dials, link);
  58.     }
  59. }
  60.  
  61. GLOBAL DIALP get_dial(WORD icon)
  62. {
  63.     DIALP    d_ptr;
  64.  
  65.     if (icon == -1) 
  66.         return NULL;
  67.     for (d_ptr = dial_list; d_ptr != NULL; d_ptr = d_ptr->next)
  68.         if (d_ptr->link == icon)
  69.             break;
  70.     return d_ptr;
  71. }
  72.  
  73. GLOBAL VOID init_dial(VOID)
  74. {
  75.     dial_list = NULL;
  76.     dial_anz = 0;
  77.     setclr(used_dials);
  78. }
  79.